<?php

/**
 * 内容管理
 */
class ContentAction extends CommonAction {

    /**
     * 内容列表
     */
    public function index() {
        $this->display();
    }

    /**
     * 添加内容
     */
    public function add() {
        $this->display();
    }
    
    /**
     * 编辑器上传
     */
    public function editorUploads(){
    	$attachConfig = parent::getSysConfig('attach');		//获取附件上传配置文件
    	$dir = $_GET['dir'];
    	if ($dir == 'image'){
			$allowExts = explode('|', $attachConfig['imageType']);
    	}else if($dir == 'media'){
    		$allowExts = array('swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb');
    	}else if($dir == 'flash'){
    		$allowExts = array('swf', 'flv');
    	}else{
    		$allowExts = array_merge(explode('|', $attachConfig['imageType']),explode('|', $attachConfig['fileType']), array('swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'));
    	}
    	$savePath = './Uploads/'.$dir.'/'.date("Ymd").'/';	//存储路径
    	$saveUrl  = '/Uploads/'.$dir.'/'.date("Ymd").'/';
    	import('ORG.Net.UploadFile');
    	$upload = new UploadFile();
    	$upload->maxSize = $attachConfig['uploadMaxSize'];
    	$upload->allowExts = $allowExts;
    	$upload->savePath = $savePath;
    	$upload->saveRule = 'uniqid';
    	if ( ! $upload->upload()){
    		$return = array('error' => 1, 'message' => $upload->getErrorMsg());
    	}else{
    		$uploadFileInfo = $upload->getUploadFileInfo();
    		$return = array('error'=>0, 'url'=>$saveUrl.$uploadFileInfo[0]['savename']);
    	}
    	exit(json_encode($return));
    }
    
   
    function fileManager(){
    	//$php_path = dirname(__FILE__) . '/';
    	//$php_url = dirname($_SERVER['PHP_SELF']) . '/';
    	
    	//根目录路径，可以指定绝对路径，比如 /var/www/attached/
    	$root_path = './Public/Uploads/';
    	//根目录URL，可以指定绝对路径，比如 http://www.yoursite.com/attached/
    	$root_url = '/Public/Uploads/';
    	//图片扩展名
    	$ext_arr = array('gif', 'jpg', 'jpeg', 'png', 'bmp');
    	
    	//目录名
    	$dir_name = empty($_GET['dir']) ? '' : trim($_GET['dir']);
    	if (!in_array($dir_name, array('', 'image', 'flash', 'media', 'file'))) {
    		echo "Invalid Directory name.";
    		exit;
    	}
    	if ($dir_name !== '') {
    		$root_path .= $dir_name . "/";
    		$root_url .= $dir_name . "/";
    		if (!file_exists($root_path)) {
    			mkdir($root_path);
    		}
    	}
    	
    	//根据path参数，设置各路径和URL
    	if (empty($_GET['path'])) {
    		$current_path = realpath($root_path) . '/';
    		$current_url = $root_url;
    		$current_dir_path = '';
    		$moveup_dir_path = '';
    	} else {
    		$current_path = realpath($root_path) . '/' . $_GET['path'];
    		$current_url = $root_url . $_GET['path'];
    		$current_dir_path = $_GET['path'];
    		$moveup_dir_path = preg_replace('/(.*?)[^\/]+\/$/', '$1', $current_dir_path);
    	}
    	echo realpath($root_path);
    	//排序形式，name or size or type
    	$order = empty($_GET['order']) ? 'name' : strtolower($_GET['order']);
    	
    	//不允许使用..移动到上一级目录
    	if (preg_match('/\.\./', $current_path)) {
    		echo 'Access is not allowed.';
    		exit;
    	}
    	//最后一个字符不是/
    	if (!preg_match('/\/$/', $current_path)) {
    		echo 'Parameter is not valid.';
    		exit;
    	}
    	//目录不存在或不是目录
    	if (!file_exists($current_path) || !is_dir($current_path)) {
    		echo 'Directory does not exist.';
    		exit;
    	}
    	
    	//遍历目录取得文件信息
    	$file_list = array();
    	if ($handle = opendir($current_path)) {
    		$i = 0;
    		while (false !== ($filename = readdir($handle))) {
    			if ($filename{0} == '.') continue;
    			$file = $current_path . $filename;
    			if (is_dir($file)) {
    				$file_list[$i]['is_dir'] = true; //是否文件夹
    				$file_list[$i]['has_file'] = (count(scandir($file)) > 2); //文件夹是否包含文件
    				$file_list[$i]['filesize'] = 0; //文件大小
    				$file_list[$i]['is_photo'] = false; //是否图片
    				$file_list[$i]['filetype'] = ''; //文件类别，用扩展名判断
    			} else {
    				$file_list[$i]['is_dir'] = false;
    				$file_list[$i]['has_file'] = false;
    				$file_list[$i]['filesize'] = filesize($file);
    				$file_list[$i]['dir_path'] = '';
    				$file_ext = strtolower(array_pop(explode('.', trim($file))));
    				$file_list[$i]['is_photo'] = in_array($file_ext, $ext_arr);
    				$file_list[$i]['filetype'] = $file_ext;
    			}
    			$file_list[$i]['filename'] = $filename; //文件名，包含扩展名
    			$file_list[$i]['datetime'] = date('Y-m-d H:i:s', filemtime($file)); //文件最后修改时间
    			$i++;
    		}
    		closedir($handle);
    	}
    	
    	//排序
    	function cmp_func($a, $b) {
    		import('@.ORG.json');
    		global $order;
    		if ($a['is_dir'] && !$b['is_dir']) {
    			return -1;
    		} else if (!$a['is_dir'] && $b['is_dir']) {
    			return 1;
    		} else {
    			if ($order == 'size') {
    				if ($a['filesize'] > $b['filesize']) {
    					return 1;
    				} else if ($a['filesize'] < $b['filesize']) {
    					return -1;
    				} else {
    					return 0;
    				}
    			} else if ($order == 'type') {
    				return strcmp($a['filetype'], $b['filetype']);
    			} else {
    				return strcmp($a['filename'], $b['filename']);
    			}
    		}
    	}
    	usort($file_list, 'cmp_func');
    	
    	$result = array();
    	//相对于根目录的上一级目录
    	$result['moveup_dir_path'] = $moveup_dir_path;
    	//相对于根目录的当前目录
    	$result['current_dir_path'] = $current_dir_path;
    	//当前目录的URL
    	$result['current_url'] = $current_url;
    	//文件数
    	$result['total_count'] = count($file_list);
    	//文件列表数组
    	$result['file_list'] = $file_list;
    	import('@.ORG.json');
    	//输出JSON字符串
    	header('Content-type: application/json; charset=UTF-8');
    	$json = new Services_JSON();
    	//echo $json->encode($result);
    	echo json_encode($result);
    }
}